import { router, addRoutes } from "./router";
import { ref } from "vue";
import { getToken } from "./composables/auth";
import { toast, showFullLoading, hideFullLoading } from "./composables/utils";
import { useInfoStore } from './store';
/**全局前置守卫 */
let hasGetInfo = false;

router.beforeEach(async (to, from, next) => {
    let defaultChange = ref();
    showFullLoading();
    let token = getToken();
    if (!token && to.name !== 'Login') {
        // 当检查到不存在token且下一步跳转的不是登录页 则需要重新跳转到登录页
        // 1、使用 router.push的方法进行跳转到登录页
        // router.push('/login')
        // 使用next的方法跳转到登录页
        next({
            name: 'Login',
        })
        // 提示未登录弹出框 
        return toast('请先登录账号', 'error');
    } else if (token && to.name === 'Login') {
        // 当token 存在，且下一步跳转的还是Login页面时，就保持在当前页面上。from是从哪里来
        // from.path的路径就是从哪里来的路径
        next({
            // 三元表达式的简写
            path: from.path ?? '/',
        })
        return toast('请勿重复登录', 'error')
    }
    /** 判断用户是否已经登录，若登录，则自动获取用户信息，
     * 并存储在vuex当中 
     * */
    if (token && !hasGetInfo) {
        const userStore = useInfoStore();
        let { menus } = await userStore.getUserInfo();
        console.log('打印menus1', menus);
        defaultChange.value = addRoutes(menus);
        hasGetInfo = true;
    }

    const title = to.meta.title;
    document.title = title + '-qzb';
    defaultChange.value ? next(to.fullPath) : next()
})
router.afterEach((to, from) => {
    hideFullLoading();
}) 